package com.love.marriage.userInfo.vo;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.love.marriage.common.vo.BaseVo;
import com.love.marriage.config.Long2StringSerializer;
import com.love.marriage.identityVerification.vo.IdentityVerificationVo;
import com.love.marriage.menuInfo.vo.MenuInfoVo;
import com.love.marriage.oss.vo.FileInfoVo;
import com.love.marriage.userBehaviorInfo.vo.UserBehaviorInfoStatisticsVo;
import com.love.marriage.userMembershipInfo.vo.UserMembershipInfoVo;
import com.love.marriage.userProfileInfo.vo.UserProfileInfoVo;
import com.love.marriage.userSettingsInfo.vo.UserSettingsInfoVo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;
import java.util.List;

/**
 * description:  用户表Vo
 * author:       mybatisPlus
 * createDate:   2024-10-11 22:04:00
 * version:      1.0.0
 */
@Getter
@Setter
@Accessors(chain = true)
@Schema(name = "UserVo", description = "用户Vo")
public class UserVo extends BaseVo<UserVo>{

    @Schema(description = "用户名", type = "String", implementation = String.class)
    private String username;

    @Schema(description = "密码（加密存储）", type = "String", implementation = String.class)
    private String password;

    @Schema(description = "手机号码", type = "String", implementation = String.class)
    private String phone;

    @Schema(description = "用户编码", type = "String", implementation = String.class)
    private String code;

    @Schema(description = "用户状态 (active=活跃, inactive=不活跃)", type = "String", implementation = String.class)
    private String status;

    @Schema(description = "微信OpenID", type = "String", implementation = String.class)
    private String wechatOpenid;

    @Schema(description = "微信公众号OpenID", type = "String", implementation = String.class)
    private String wechatGzhOpenid;

    @Schema(description = "微信UnionID（跨平台统一标识）", type = "String", implementation = String.class)
    private String wechatUnionid;

    @JsonSerialize(using = Long2StringSerializer.class)
    @Schema(description = "头像id", type = "Long", implementation = Long.class)
    private Long avatar;

    @Schema(description = "来源", type = "Integer", implementation = Integer.class)
    private Integer source;

    @Schema(description = "是否红娘", type = "Boolean", implementation = Boolean.class)
    private Boolean matchmakerFlag;

    @Schema(description = "仅自己可见（1：是，0：否）", type = "Integer", implementation = Integer.class)
    private Integer self;

    @Schema(description = "绑定微信账号的时间", type = "LocalDateTime", implementation = LocalDateTime.class)
    private LocalDateTime wechatBindTime;

    @Schema(description = "推荐人的用户id", type = "Long", implementation = Long.class)
    @JsonSerialize(using = Long2StringSerializer.class)
    private Long introUserId;

    @Schema(description = "token", type = "String", implementation = String.class)
    private String token;

    @Schema(description = "是否认证", type = "Boolean", implementation = Boolean.class)
    private Boolean verificationFlag;

    @Schema(description = "是否是会员", type = "Boolean", implementation = Boolean.class)
    private Boolean membershipFlag;

    @Schema(description = "会员类型名称", type = "String", implementation = String.class)
    private String membershipName;

    @Schema(description = "是否是置顶", type = "Boolean", implementation = Boolean.class)
    private Boolean topFlag;

    @Schema(description = "用户资料信息", implementation = UserProfileInfoVo.class)
    private UserProfileInfoVo userProfileInfoVo;

    @Schema(description = "用户配置信息", implementation = UserSettingsInfoVo.class)
    private UserSettingsInfoVo userSettingsInfoVo;

    @Schema(description = "用户认证信息", implementation = IdentityVerificationVo.class)
    private IdentityVerificationVo identityVerificationVo;

    @Schema(description = "头像信息", implementation = FileInfoVo.class)
    private FileInfoVo personAvatar;

    @Schema(description = "是否收藏", implementation = Boolean.class)
    private Boolean collect;

    @Schema(description = "是否喜欢", implementation = Boolean.class)
    private Boolean like;

    @Schema(description = "用户行为统计", implementation = UserBehaviorInfoStatisticsVo.class)
    private UserBehaviorInfoStatisticsVo userBehaviorInfoStatisticsVo;

    @Schema(description = "用户会员信息", implementation = UserMembershipInfoVo.class)
    private UserMembershipInfoVo userMembershipInfoVo;

    private List<MenuInfoVo> menuInfoVoList;

    @Schema(description = "是否关联公众号", type = "Boolean", implementation = Boolean.class)
    private Boolean gzhFlag;

    @Schema(description = "个人形象照片数量", type = "Integer", implementation = Integer.class)
    private Integer personalPhotoNum;

    @Schema(description = "是否隐藏手机号", implementation = Boolean.class)
    private Boolean hiddenPhone;

    @Schema(description = "本地imId", implementation = Integer.class)
    private String localImId;

    @Schema(description = "悬赏征婚标识", implementation = Boolean.class)
    private Boolean rewardFlag;

    @Schema(description = "是否合伙人", implementation = Boolean.class)
    private Boolean partnerFlag;
}